{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "C++ 与软件工程中与 Mixin 相关的概念\n",
    "\n",
    "| 术语（English/中文） | 类型 | 核心思想 | 与 mixin 的关系 |\n",
    "|---|---|---|---|\n",
    "| Mixin / 混入类 | 类复用 | 通过继承“混入”小能力；通常不单独实例化 | 基础概念 |\n",
    "| CRTP / 奇异递归模板模式 | 模板模式 | 派生类将自身传给基类以注入静态行为 | 编译期 mixin |\n",
    "| Policy-based design / 基于策略的设计 | 模板组合 | 通过模板策略类组合行为 | 以策略混入特性 |\n",
    "| Traits (type traits) / 类型萃取（C++） | 元编程工具 | 提供编译期类型信息/行为选择 | 支持可配置的 mixin |\n",
    "| Tag/Marker base / 标签/标记基类 | 类型/分派辅助 | 空基类或标签类型启用/禁用特性 | 标记式 mixin |\n",
    "| Empty Base Optimization (EBO) / 空基类优化 | 优化 | 以零开销存储空基类 | 使零成本的 mixin/策略成为可能 |\n",
    "| Multiple inheritance / 多重继承 | 继承机制 | 聚合小基类以叠加能力 | 常见的 mixin 载体 |\n",
    "| Composition/Delegation / 组合/委托 | 对象组合 | 持有并转发到辅助对象 | 运行期替代 mixin 的方式 |\n",
    "| Decorator / 装饰器 | 设计模式 | 通过包装实例添加职责 | 运行期“动态 mixin” |\n",
    "| Strategy / 策略 | 设计模式 | 通过接口切换算法 | 可插拔行为（对比静态 mixin） |\n",
    "| Adapter / 适配器 | 设计模式 | 为现有类型提供新接口 | “适配式”能力注入 |\n",
    "| Interface/Abstract Base / 接口/抽象基类 | 契约 | 声明需实现的能力 | 通过契约而非 mixin 提供能力 |\n",
    "| Protocol/Role/Trait (other languages) / 协议/角色/Trait（其他语言） | 语言特性 | 可组合的行为单元（如 Rust/Scala 的 trait） | 语言级 mixin |\n",
    "| Extension/Category / 扩展/分类 | 语言特性 | 为现有类型添加方法（C#/Swift/ObjC） | 类似 mixin 的方法注入 |\n",
    "| Component/ECS / 组件化/实体组件系统 | 架构 | 将行为拆分为可组合的组件 | 系统化拼装 |\n",
    "| AOP / 面向切面编程 | 横切技术 | 通过织入/拦截注入横切关注点 | 正交地“混入”关注点 |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "类似 mixin 的概念对比表\n",
    "\n",
    "| 概念/术语 | 典型语言/技术 | 实现/方法 | 状态/字段 | 组合时机 | 冲突与解析 | 常见用途/备注 |\n",
    "|---|---|---|---|---|---|---|\n",
    "| Mixin（多重继承式） | Python、Ruby | 支持具体方法 | 可依赖宿主状态，通常不自带存储 | Python 运行时；Ruby 运行时 | Python C3 MRO；Ruby 祖先链 | 水平复用、拆分职责 |\n",
    "| Trait | Scala、Rust、PHP | 默认方法（Scala/Rust），PHP 也可含属性 | 一般无存储；Scala trait 可字段，PHP trait 可属性 | 编译期 | Scala 线性化；Rust 需显式消歧；PHP insteadof/as | 解耦行为与实现 |\n",
    "| 接口默认方法 | Java 8+、C# 8+ | 默认实现 | 无实例字段 | 编译期 | 冲突需类显式覆盖 | 向后兼容与演进 |\n",
    "| 扩展方法/扩展 | C# 扩展、Kotlin/Swift 扩展 | 添加静态解析的方法 | 无存储（Swift/Kotlin 不增存储） | 编译期 | 作用域/静态解析决定 | 不改动原类型源码 |\n",
    "| Category/分类 | Objective‑C Category | 添加方法 | 不增 ivar（可用关联对象） | 链接/运行时 | 同名覆盖不确定，后编译单元可能覆盖 | 给系统类加方法 |\n",
    "| 模块混入 | Ruby Module include/extend | 方法、常量 | 无独立存储 | 运行时 | 祖先链解析，后 include 覆盖前者 | Ruby 常用 mixin |\n",
    "| 嵌入（Embedding） | Go struct embedding | 方法提升 | 可含状态 | 编译期 | 同名需显式选择 | 组合优于继承 |\n",
    "| JS Mixin 模式 | JavaScript Object.assign/函数式 | 方法与数据 | 可附加数据 | 运行时 | 冲突“后写者赢”或自定义策略 | 灵活但需约定 |\n",
    "| 角色（Role） | Raku/Perl、Perl Moose | 方法与要求 | 可声明属性 | 编译期 | 需显式消解冲突 | 类似 trait 的组合 |\n",
    "| Typeclass | Haskell、Rust（typeclass 风格） | 为约束提供实现 | 无实例存储 | 编译期 | 实例选择与一致性/孤儿规则 | 静态分派的多态 |\n",
    "| PHP Traits | PHP | 方法、属性 | 无独立存储（属性注入） | 编译期 | insteadof/as 消解冲突 | 官方 mixin 机制 |\n",
    "| Sass/Less Mixin | Sass、Less | 属性片段/参数化 | N/A | 预处理阶段 | 作用域/命名 | 样式复用 |\n",
    "| AOP 切面 | AspectJ、Spring AOP | 横切增强 | 无类型字段 | 编译/织入时 | 切点/优先级 | 跨越性关注点 |\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++17",
   "language": "C++17",
   "name": "xcpp17"
  },
  "language_info": {
   "name": "C++17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
